package com.hejia.alauda.service;

import java.util.Date;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.hejia.alauda.entity.Parameter;
import com.hejia.alauda.entity.example.ParameterExample;
import com.hejia.alauda.persistence.mybatis.ParameterMapper;
import com.hejia.alauda.utils.Pager;

/**
 * 
 * @author jatin
 *
 */
@Service
public class CustomServiceImpl implements CustomService {

	@Resource
	private ParameterMapper parameterMapper;

	@Override
	public Pager<Parameter> findCustom(Pager<Parameter> pager) {
		return findCustom(pager, new ParameterExample());
	}

	@Override
	public Pager<Parameter> findCustom(Pager<Parameter> pager,
			ParameterExample example) {
		example.appendCriterion("category=", Parameter.Category.Custom);
		example.setOrderByClause("id desc");
		pager.setList(parameterMapper.selectByExample(example, pager));
		pager.setTotalCount(parameterMapper.countByExample(example));
		return pager;
	}

	@Override
	public boolean saveCustom(Parameter parameter) {
		if (parameterMapper.judgeCustomCode(parameter.getCode()) >= 1) {
			return false;
		} else {
			parameter.setCreateDate(new Date());
			parameter.setModifyDate(new Date());
			parameter.setCategory(Parameter.Category.Custom);
			return parameterMapper.insert(parameter) > 0;
		}
	}

	@Override
	public Parameter getCustomById(Long id) {
		return parameterMapper.selectByPrimaryKey(id);
	}

	@Override
	public boolean modifyCustom(Parameter parameter) {
		Parameter parameter2 = parameterMapper.selectByPrimaryKey(parameter
				.getId());
		if (parameter2.getCode().equals(parameter.getCode())) {
			parameter2.setMemo(parameter.getMemo());
			parameter2.setCode(parameter.getCode());
			parameter2.setValue(parameter.getValue());
			return parameterMapper.updateByPrimaryKeyWithNullValue(parameter2) > 0;
		} else {
			if (parameterMapper.judgeCustomCode(parameter.getCode()) >= 1) {
				return false;
			} else {
				parameter2.setMemo(parameter.getMemo());
				parameter2.setCode(parameter.getCode());
				parameter2.setValue(parameter.getValue());
				return parameterMapper
						.updateByPrimaryKeyWithNullValue(parameter2) > 0;
			}
		}

	}

	@Override
	public boolean deleteCustom(Long id) {
		Parameter parameter = parameterMapper.selectByPrimaryKey(id);
		return parameterMapper.deleteByPrimaryKey(parameter) > 0;
	}

}
